package main

import "fmt"

// 定义一个基础 struct 的 MsgModel, 包含一个成员变量 msgId

type MsgModel struct {
	msgId   int
	msgType int
}

// msgModel 的一个成员变方法，用来设置 msgId
func (msg *MsgModel) SetId(msgId int) {
	msg.msgId = msgId
}

func (msg *MsgModel) SetType(msgType int) {
	msg.msgType = msgType
}

// 定义一个子类, 包含了 MsgModel， 即：组合， 但是办没有给定 msgModel 的任何名字，因此是匿名组合
type GroupMsgModel struct {
	MsgModel
	// 如果子类也包含基类的成员变量，那么通过子类设置和获取得到的变量都是基类
	msgId int
}

func (group *GroupMsgModel) GetId() int {
	return group.msgId
}

func main() {
	group := &GroupMsgModel{}
	group.SetId(123)
	group.SetType(1)
	fmt.Println("group.msgId = '", group.msgId, "\t group.MsgModel.msgId = ", group.MsgModel.msgId)
	fmt.Println("group.msgType = ", group.msgType, "\t group.MsgModel.msgType = ", group.MsgModel.msgType)

}
